package com.kai.steering.data.service.service;

import com.kai.steering.data.service.entity.domainObject.TestDO;
import com.kai.steering.data.service.entity.domainObject.WarehouseDO;
import com.kai.steering.data.service.entity.domainObject.WarehouseTestDO;
import com.kai.steering.data.service.entity.dto.WarehouseQueryDTO;
import com.kai.steering.data.service.entity.po.Warehouse;
import com.kai.steering.common.web.service.BaseService;
import com.kai.steering.common.vo.Page;
import com.kai.steering.data.service.entity.vo.WarehouseVO;
import com.kai.steering.exception.ExcelException;
import org.springframework.web.multipart.MultipartFile;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;

/**
 * <pre>
 * 仓库 服务类
 * </pre>
 *
 * @author kai
 * @since 2022-02-23
 */
public interface WarehouseService extends BaseService<Warehouse> {

    /**
     * 保存
     *
     * @param warehouseDO
     * @return
     */
    WarehouseDO saveWarehouse(WarehouseDO warehouseDO);

    /**
     * 修改
     *
     * @param warehouseDO
     * @return
     */
    WarehouseDO updateWarehouse(Serializable id, WarehouseDO warehouseDO);

    /**
     * 删除
     *
     * @param id
     * @return
     */
    boolean deleteWarehouse(Serializable id);

    /**
     * 根据ID获取查询对象
     *
     * @param id
     * @return
     */
    WarehouseDO getWarehouseById(Serializable id, HashMap<String, Boolean> parameterMap);


    /**
     * 获取所有对象
     *
     * @return
     */
    List<WarehouseDO> getAllWarehouse();

    List<TestDO>  getWarehouseTestById(Serializable id) ;
    /**
     * 获取分页对象
     *
     * @param warehouseQueryDTO
     * @return
     */
    Page<WarehouseVO> getWarehousePageList(WarehouseQueryDTO warehouseQueryDTO);

    /**
     * 判断某属性是否存在
     *
     * @param key
     * @param val
     * @param id
     * @return
     */
    boolean isExists(String key, String val, Serializable id);

    /**
     * 移动仓库
     * @param warehouseMove
     * @param warehouseId
     * @return
     */
    boolean moveWarehouse(Serializable warehouseMove, Serializable warehouseId);

    /**
     * 构建仓库树
     * @param warehouseId
     * @param knowledgeExist
     * @param testExist
     * @return
     */
    WarehouseDO treeWarehouse(Serializable warehouseId, HashMap<String, Boolean> parameterMap);

    /**
     * 移动试卷
     * @param warehouseId
     * @param testId
     * @return
     */
    boolean moveTestInWarehouse(Serializable warehouseTarget,Serializable warehouseId, Serializable testId);

    WarehouseTestDO importTest(Serializable id, MultipartFile file);

    void addTest(String id, TestDO testDO);
}

